#include <stdio.h>
#include "insertion_sort.h"
#include "bench.h"

void run_insertion_sort(int*data, int size)
{
  MEASURE_START();
  insertion_sort(data,size);
  MEASURE_STOP();
  printf("Elapsed Cycles: %lu\n", ELAPSED_CYCLES());
  printf("start: %lu, end: %lu, difference: %lu \n", start, end, start-end);
}

void run()
{
	//int i;

	static int data_64_down[64] = {64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
	static int data_64_up[64]   = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64};

	static int data_32_down[32] = {32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
	static int data_32_up[32]   = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
	static int data_32_rand[32] = {5,7,23,31,3,10,29,25,27,18,15,4,21,30,5,17,26,4,19,2,5,23,12,6,26,9,14,7,26,12,31,6};

	static int data_16_down[16] = {16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
	static int data_16_up[16]   = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

	static int data_8_down[8] = {8,7,6,5,4,3,2,1};
	static int data_8_up[8]   = {1,2,3,4,5,6,7,8};

	//static int data_8[8] = {8,7,6,5,4,3,2,1};

        /* TODO: write test cases */

	run_insertion_sort(data_32_down, 32);
}

int main(int argc, char** argv)
{
  init_benchmarks(1);
  run();
}
